/**
 **@author		周羽
 **@date  		2017-03-27
 **@brief		链表的创建以及插入等操作函数
 */


#ifndef __LINKLIST_H__
#define __LINKLIST_H__

#include "data_global.h"
#include <stdlib.h>
#include <malloc.h>

//bidirectional双向的（计算机专业名词）
//undirectional单向的（计算机专业名词）
//loop循环
typedef struct loop_linknode
{
	struct loop_linknode * pre;//指向前一个节点
	struct env_info msg;//链表中的数据包结构
	struct loop_linknode * next;//指向后裔个节点
}loop_linklist_t;

typedef struct undire_linknode
{
	struct undire_linknode * pre;
	struct env_info msg;
	struct undire_linknode * next;
}undire_linklist_t;

//定义个全局变量，包含本头文件之后，在所有c文件中都可已使用
loop_linklist_t * link_head;
undire_linklist_t * head_sql, * end_sql;

//创建双向循环链表，链表节点数为5
void loop_linklist_create(void);
//创建双向非循环链表
void undire_linklist_create(void);

//判断双向非循环链表是否为空，空返回0，非空返回1
int empty_undire_linklist(void);

//向循环链表中插入数据，第一次插入时，指针先指向下一个元素，在插入
//即指针总是指向最新插入的那个元素
void loop_head_insert(struct env_info msg);
//向双向非循环链表中向头部插入数据
void undire_head_insert(struct env_info msg);

//对双向非循环链表取出最后一个数据，此函数返回了该数据的地址
//用完数据时候要对该指针释放，free
undire_linklist_t * end_get(void);


#endif
